package in.rob.client.page; import in.lib.Constants; import in.lib.event.DeletePostEvent; import in.lib.event.NewPostEvent; import in.lib.handler.streams.GlobalResponseHandler; import in.lib.handler.streams.MissingPostsResponseHandler; import in.lib.helper.ResponseHelper; import in.lib.manager.APIManager; import in.lib.manager.SettingsManager; import in.lib.manager.UserManager; import in.model.Stream; import in.model.base.NetObject; import in.rob.client.page.base.PostStreamFragment; import in.rob.client.page.base.StreamFragment; import in.rob.client.widget.ScrollWidgetProvider; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import com.squareup.otto.Subscribe; /** * Fragment used for displaying posts in a fragment list * @author callumtaylor */ public class GlobalPage extends PostStreamFragment { @Override public void initData() { if (getCacheFileName() != null && getCacheManager().fileExists(getCacheFileName())) { runOnUiThread(new Runnable() { @Override public void run() { new CacheLoader(getCacheFileName()).execute(); } }); } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { runWhenReady(new Runnable() { @Override public void run() { if (getAdapter() != null && getAdapter().getCount() < SettingsManager.getPageSize()) { onForceRefresh(); } } }); } } @Override public void onDataReady() { SharedPreferences prefs = getContext().getSharedPreferences(getContext().getPackageName(), Context.MODE_PRIVATE); int topPos = prefs.getInt(String.format(Constants.PREFS_GLOBAL_TOP_POSITION, UserManager.getUserId()), 0); int topPosY = prefs.getInt(String.format(Constants.PREFS_GLOBAL_TOP_POSITION_Y, UserManager.getUserId()), 0); getHeadedListView().setSelectionFromTop(topPos, topPosY); } @Override public void fetchStream(String lastId, boolean append) { showProgressLoader(); GlobalResponseHandler handler = new GlobalResponseHandler(getApplicationContext(), append); handler.setResponseKey(Constants.RESPONSE_GLOBAL); ResponseHelper.getInstance().addResponse(Constants.RESPONSE_GLOBAL, handler, this); APIManager.getInstance().getGlobalTimeLine(lastId, handler); } @Override public void loadMissingItems(final NetObject o) { showProgressLoader(); MissingPostsResponseHandler handler = new MissingPostsResponseHandler(getApplicationContext(), o); handler.setResponseKey(Constants.RESPONSE_GLOBAL_MISSING_POSTS); ResponseHelper.getInstance().addResponse(Constants.RESPONSE_GLOBAL_MISSING_POSTS, handler, this); APIManager.getInstance().getMissingGlobal(o.getId(), -SettingsManager.getPageSize(), handler); } @Override public void onDestroyView() { int[] pos = getLastViewPosition(null); SharedPreferences prefs = getContext().getSharedPreferences(getContext().getPackageName(), Context.MODE_PRIVATE); prefs .edit() .putInt(String.format(Constants.PREFS_GLOBAL_TOP_POSITION, UserManager.getUserId()), pos[0]) .putInt(String.format(Constants.PREFS_GLOBAL_TOP_POSITION_Y, UserManager.getUserId()), pos[1]) .apply(); super.onDestroyView(); } @Override public String getCacheFileName() { return Constants.CACHE_GLOBAL_LIST_NAME; } @Override public String[] getResponseKeys() { return new String[]{Constants.RESPONSE_GLOBAL, Constants.RESPONSE_GLOBAL_MISSING_POSTS}; } @Override public void onFinishedWriting() { if (android.os.Build.VERSION.SDK_INT >= 11) { Context context = getApplicationContext(); ComponentName name = new ComponentName(context, ScrollWidgetProvider.class); int[] ids = AppWidgetManager.getInstance(context).getAppWidgetIds(name); for (int index = 0; index < ids.length; index++) { Intent refresh = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); refresh.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, ids[index]); getContext().sendBroadcast(refresh); } } } @Subscribe @Override public void onPostRecieved(NewPostEvent event) { super.onPostRecieved(event); } @Subscribe @Override public void onPostDeleted(DeletePostEvent event) { super.onPostDeleted(event); } public class CacheLoader extends StreamFragment.CacheLoader { public CacheLoader(String s) { super(s); } @Override public void onPostExecute(Stream stream) { if (getActivity() == null) { return; } if (stream != null && stream.getObjects().size() > 0) { getAdapter().setStream(stream); getAdapter().notifyDataSetChanged(); checkAdapterSizes(); } stream = null; runWhenReady(new Runnable() { @Override public void run() { onDataReady(); } }); } } }